<!DOCTYPE HTML>
<html>
<head>
<title>RegWrite | AutoHotkey</title>
<meta name="description" content="The RegWrite command writes a value to the registry." />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
</head>
<body>

<h1>RegWrite</h1>
<p>写入值到注册表.</p>

<h2 id="new">新语法 <span class="ver">[v1.1.21+]</span></h2>
<pre class="Syntax"><span class="func">RegWrite</span>, ValueType, KeyName <span class="optional">, ValueName, Value</span></pre>

<h3>参数</h3>
<dl>

  <dt>ValueType</dt>
  <dd><p>必须为 REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ, REG_DWORD 或 REG_BINARY 的其中一个.</p></dd>

  <dt>KeyName</dt>
  <dd><p>注册表键的全名.</p>
      <p>必须以 HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_USER, HKEY_CLASSES_ROOT 或 HKEY_CURRENT_CONFIG(或这些的缩写, 如 HKLM) 开始. 要访问<a href="LoopReg.htm#remote">远程注册表</a>, 请在前面加上计算机名和冒号(或在 <span class="ver">[v1.1.21+]</span>, 可用斜杠 / 或 \), 就像在本例中一样: <code>\\workstation01:HKEY_LOCAL_MACHINE</code>, 或 <span class="ver">[v1.1.21+]</span> <code>\\workstation01\HKEY_LOCAL_MACHINE</code></p></dd>

  <dt>ValueName</dt>
  <dd><p>将被写入的值的名称. 如果为空或省略, <em>KeyName</em> 的默认值将被使用, 这是在注册表中值名显示为 "(默认)" 的值.</p></dd>

  <dt>Value</dt>
  <dd><p>要写入的值. 如果省略, 则根据 <em>ValueType</em> 的不同, 它默认为空字符串或 0. 如果文本较长, 可以通过<a href="../Scripts.htm#continuation">延续片段</a>的方法将其分解成较短的几行, 这样可以增加可读性和可维护性.</p></dd>

</dl>

<h2 id="old">传统语法</h2>
<p class="warning"><strong>过时的:</strong> 不推荐在新脚本中使用此语法. 请使用<a href="#new">新语法</a>.</p>
<pre class="Syntax"><span class="func">RegWrite</span>, ValueType, RootKey, SubKey <span class="optional">, ValueName, Value</span></pre>

<h3 id="Old_Parameters">参数</h3>
<dl>

  <dt>ValueType</dt>
  <dd><p>必须为 REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ, REG_DWORD 或 REG_BINARY 的其中一个.</p></dd>

  <dt>RootKey</dt>
  <dd><p>必须为 HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_USER, HKEY_CLASSES_ROOT 或 HKEY_CURRENT_CONFIG 的其中一个(或者它们的缩写, 例如 HKLM). 要访问<a href="LoopReg.htm#remote">远程注册表</a>, 请在前面加上计算机名和冒号(或在 <span class="ver">[v1.1.21+]</span>, 可用斜杠 / 或 \), 就像在本例中一样: <code>\\workstation01:HKEY_LOCAL_MACHINE</code>, 或 <span class="ver">[v1.1.21+]</span> <code>\\workstation01\HKEY_LOCAL_MACHINE</code></p></dd>

  <dt>SubKey</dt>
  <dd><p>子键名(例如 Software\SomeApplication). 如果 <em>SubKey</em> 不存在, 则进行创建(需要时创建它的父键以及父键的父键等). 如果 <em>SubKey</em> 留空, 则直接把值写入到 <em>RootKey</em>(不过一些操作系统可能会拒绝写入到 HKEY_CURRENT_USER 的根键中).</p></dd>

  <dt>ValueName</dt>
  <dd><p>将被写入的值的名称. 如果为空或省略, 则使用 <em>Subkey</em> 的默认值, 这是在注册表中值名显示为 "(默认)" 的值.</p></dd>

  <dt>Value</dt>
  <dd><p>要写入的值. 如果省略, 则根据 <em>ValueType</em> 的不同它默认为空字符串或 0. 如果文本较长, 可以通过<a href="../Scripts.htm#continuation">延续片段</a>的方法将其分解成较短的几行, 这样可以增加可读性和可维护性.</p></dd>

</dl>

<h2 id="Error_Handling">错误处理</h2>
<p><span class="ver">[v1.1.04+]</span>: 此命令失败时会抛出异常. 想了解更多信息, 请参阅<a href="Catch.htm#RuntimeErrors">运行时错误</a>.</p>
<p>如果遇到问题则 <a href="../misc/ErrorLevel.htm">ErrorLevel</a> 被置为 1, 否则为 0.</p>
<p><a href="../Variables.htm#LastError">A_LastError</a> 被设置为操作系统 GetLastError() 函数返回的结果.</p>

<h2 id="Remarks">备注</h2>
<p>如果 <em>ValueType</em> 为 REG_DWORD, 则 <em>Value</em> 应该介于 -2147483648 和 4294967295(0xFFFFFFFF) 之间.</p>
<p>写入 REG_BINARY 键时, 请使用十六进制的字符串, 例如 REG_BINARY 值 01, a9, ff, 77 在写入时要使用字符串 01A9FF77.</p>
<p>写入 REG_MULTI_SZ 键时, 您必须使用换行符(`n) 分隔各个部分. 最后一个部分后面的换行符是可选的. 不允许存在空的部分. 换句话说, 在一行中不能连续指定两个换行符(`n`n), 因为这样会导致写入到注册表的值比期望的短.</p>
<p><span class="ver">[v1.1.10.01+]</span>: 支持大于 64K 的 REG_BINARY 和 REG_MULTI_SZ 值. 在旧版本中, 它们会被截断为 64K.</p>
<p>要获取和操作多个注册表键或值, 请考虑使用<a href="LoopReg.htm">注册表循环</a>.</p>
<p>关于如何访问远程计算机注册表的详情, 请参阅<a href="LoopReg.htm">注册表循环</a>中的备注.</p>
<p>要在 32 位脚本中读写注册表 64 位部分的条目或进行相反的操作, 请使用 <a href="SetRegView.htm">SetRegView</a>.</p>

<h2 id="Related">相关</h2>
<p><a href="RegDelete.htm">RegDelete</a>, <a href="RegRead.htm">RegRead</a>, <a href="LoopReg.htm">注册表循环</a>, <a href="SetRegView.htm">SetRegView</a>, <a href="IniWrite.htm">IniWrite</a></p>

<h2 id="Examples">示例</h2>
<div class="ex" id="ExNewVsOld">
<p><a class="ex_number" href="#ExNewVsOld"></a> 新语法 vs. 旧语法.</p>
<p>尽管语法不同, 但这两个例子的效果是一样的; 即, 它们向注册表写入一个字符串.</p>
<pre>RegWrite, REG_SZ, HKEY_LOCAL_MACHINE\SOFTWARE\TestKey, MyValueName, Test Value</pre>
<pre>RegWrite, REG_SZ, HKEY_LOCAL_MACHINE, SOFTWARE\TestKey, MyValueName, Test Value</pre>
</div>

<div class="ex" id="ExBinary">
<p><a class="ex_number" href="#ExBinary"></a> 将二进制数据写入注册表.</p>
<pre>RegWrite, REG_BINARY, HKEY_CURRENT_USER\Software\TEST_APP, TEST_NAME, 01A9FF77</pre>
</div>

<div class="ex" id="ExMulti">
<p><a class="ex_number" href="#ExMulti"></a> 向注册表写入一个多行字符串.</p>
<pre>RegWrite, REG_MULTI_SZ, HKEY_CURRENT_USER\Software\TEST_APP, TEST_NAME, Line1`nLine2</pre>
</div>

</body>
</html>